AWSの監視系サービスが一気に学べる公式ワークショップに新コンテンツが追加されたのでやってみた
以前、AWSの監視系のサービスが一気に学べる 公式Workshopをご紹介しました。
こちらのWorkshopに新コンテンツが追加されたようなので、日本語版でやってみたいと思います。
新コンテンツの内容
今回追加されたのは以下3章です。
- AMAZON MANAGED SERVICE FOR PROMETHEUS (AMP)
- AMAZON MANAGED SERVICE FOR GRAFANA (AMG)
- AWS DISTRO FOR OPENTELEMETRY
AMAZON MANAGED SERVICE FOR PROMETHEUS (AMP)とAMAZON MANAGED SERVICE FOR GRAFANA (AMG)は昨年のre:Invent 2020で発表された新サービスですね。両者ともまだパブリックプレビューである点は要注意です。AWS DISTRO FOR OPENTELEMETRYは、CNCFの一部であるOpenTelemetry、これは分散トレースとメトリクスの収集のためのオープンスタンダードの定義に取り組んでいるプロジェクトなのですが、その仕様に準じた方法でAWSの各種サービスが利用できるようになるディストリビューションです。
やってみた
3章ともやろうとしたのですが、AMPの章だけのレポートになってしまいました。。AMPだけで結構色々な箇所でハマってしまい、またAMGがAWS SSOを有効化したアカウントでないと使えないということを後から知り、AMGとAWS DISTRO FOR OPENTELEMETRYの章は断念しました、ご了承ください。以下、基本的に私がワークショップの指示通りやってうまく行かなかった箇所をレポートしていきます。
準備
追加された3章はその章単体で(=他の章をやる必要なく)で学ぶことができます。が、環境のセットアップだけは必要なので、ここ以下からCloud9のセットアップを行なってください。
セットアップ手順内に以前このWorkShopをやった際にはリリースされていなかったCloudShellが登場していました。ちゃんとこのあたりもアップデートされてるんですね。
トラフィックジェネレーターはいずこ?
前回このワークショップをやった際は、環境のセットアップ時に併せてトラフィックジェネレーターも作成しました。その名の通りトラフィックジェネレーターがトラフィックを自動生成してくれるので、確認すべきメトリックやログやトレースがいい感じに存在していました。
現在はトラフィックジェネレーターの設定方法の記載箇所を見つけることができませんでした。が、 アプリケーションのデプロイ終了後以下方法で設定することができました。
- Cloud9でNew Terminalを開く
$ cd workshopfiles/one-observability-demo/PetAdoptions/trafficgenerator/trafficgenerator/
$ docker-compose up
AMAZON MANAGED SERVICE FOR PROMETHEUS (AMP)
東京リージョン未対応
最初のワークスペースの作成ですが、AMPがまだ東京リージョンに来ていないので、別リージョンで作業する必要があります。
ファイル名間違い
途中 「15.2 EKS メトリクスの取り込み」の「IAM ロールと Kubernetes サービスアカウントのセットアップ」で以下エラーになりました。
$ ./resources/setup-irsa-eks-amp.sh bash: ./resources/setup-irsa-eks-amp.sh: No such file or directory
これは実行ファイル名が間違っているためです。ファイル名を書き換えましょう。
$ ./resources/amp-setup-irsa-eks.sh arn:aws:iam::111111111111:role/amp-iamproxy-ingest-role
Role名間違い
続いての 新しいサーバーのセットアップとメトリクスの取り込み開始でも、IAM Role名を書き換える必要があります。
- aws iam get-role --role-name iamproxy-ingest-role | jq .Role.Arn + aws iam get-role --role-name amp-iamproxy-ingest-role | jq .Role.Arn
リージョン指定
さらに、Cloud9とAMPを別リージョンに作成した場合(例えばCloud9は東京リージョンに作成したが、AMPは東京に来ていないのでバージニア北部リージョン(us-east-1)に作成した場合など)は、その後のワークスペースを一覧表示するコマンドにリージョン指定が必要です。AMPを作成したリージョンを指定します。
- aws amp list-workspaces + aws amp list-workspaces --region us-east-1
ADOTコレクタのセットアップ時のファイル書き換え
ADOT コレクタのセットアップにて、 ./resources/amp-eks-adot-prometheus-daemonset
ファイルを開いて編集する箇所があります。
- 「
<AMP_REMOTE_WRITE_URL>
を、作成したワークスペースの Ingest URL に置き換えてファイルを保存します」とあります。Ingest URLとはワークスペースの詳細画面で確認できる、「エンドポイント - リモート書き込み URL」のことです。 - 同ファイル内に「
<AWS_REGION>
」と書かれた箇所(41行目)もあるので、こちらも書き換えましょう。ワークスペースを作成したリージョン名に書き換えます。
http://127.0.0.1:8080 に移動する方法
途中「http://127.0.0.1:8080 に移動して…」という箇所がありますが、Cloud9では「Preview > Preview Running Application」をクリックします。
localhost から Prometheus サーバーコンテナに接続するコマンドも修正が必要です。
- kubectl port-forward -n prometheus pods/prometheus-chart-server-0 8080:9090 + kubectl port-forward -n prometheus pods/amp-prometheus-chart-server-0 8080:9090
amp_query_override_values.yaml
ファイル内容書き換え
ここからは「15.3 Grafana を利用したメトリクスの視覚化」のページの内容です。「Grafana サーバーを更新して AWS 署名プロキシを使用する」内でamp_query_override_values.yaml
ファイルを作成しますが、その中の
${IAM_PROXY_PROMETHEUS_ROLE_ARN}
はecho $IAM_PROXY_PROMETHEUS_ROLE_ARN
で取得できるIAM RoleのArnに書き換えてください。
GrafanaのPod名
「Grafana コンソールにログインしてメトリクスを視覚化」ですが、GRAFANA_POD_NAME
は1つ前のhelm upgrade
コマンドの出力結果にその取得方法が記載されています。以下のハイライトしている行をご確認ください。
$ helm upgrade --install grafana-for-amp grafana/grafana -n grafana -f ./amp_query_override_values.yaml Release "grafana-for-amp" has been upgraded. Happy Helming! NAME: grafana-for-amp LAST DEPLOYED: Fri Apr 30 09:20:10 2021 NAMESPACE: grafana STATUS: deployed REVISION: 2 NOTES: 1. Get your 'admin' user password by running: kubectl get secret --namespace grafana grafana-for-amp -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster: grafana-for-amp.grafana.svc.cluster.local Get the Grafana URL to visit by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace grafana -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana-for-amp" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace grafana port-forward $POD_NAME 3000 3. Login with the password from step 1 and the username: admin ################################################################################# ###### WARNING: Persistence is disabled!!! You will lose your data when ##### ###### the Grafana pod is terminated. ##### #################################################################################
なので、以下コマンドで代替可能です。
$ export POD_NAME=$(kubectl get pods --namespace grafana -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana-for-amp" -o jsonpath="{.items[0].metadata.name}") $ kubectl port-forward -n grafana pods/${POD_NAME} 5001:3000
http://localhost:5001 にアクセスする方法
Cloud9でこのURLにアクセスする方法がわかりませんでした。Previewだとローカルの5001にアクセスできないようなので、kubectl port-forward
のポートを8080:3000
にしてみたのですがそれでもエラーになります。
代わりにGrafanaのサービスのタイプをLoadBalancerにして外部からアクセスできるようにしました。
$ kubectl patch -n grafana service/grafana-for-amp -p '{"spec":{"type":"LoadBalancer"}}' $ kubectl get -n grafana service/grafana-for-amp NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE grafana-for-amp LoadBalancer 10.100.167.172 a2b26f977f97a41c7804fb63a3d2507b-248802392.ap-northeast-1.elb.amazonaws.com 80:31851/TCP 34m
EXTERNAL-IP
列のCLBのFQDNにブラウザアクセスするとGrafanaのダッシュボードのログイン画面に遷移できます。
AMP データソースの設定
ログイン後、真ん中屋や右にある「DATA SOURCES」パネルをクリックします。
ワークショップの指示通りにAMPデータソースの設定を埋めていって、最下部の「Save & Test」を押下したところ、Bad Gatewayエラーになってしまいました。
修正方法がわからなかったので、「SigV4 Auth Details」の「Authentication Provider」を「Access & secret key」に変え、AdministerAccess権限のIAMユーザーのキーで埋めたところ、「Data source is working」と成功しました。おそらく私のService Account周りの設定が何か間違っているのだと思います。